﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using Newtonsoft.Json;
using UFIDA.U8.BJSOFT.LF.MES.WEBAPI.DBHelp;
using UFIDA.U8.BJSOFT.LF.MES.WEBAPI.Models;

namespace UFIDA.U8.BJSOFT.LF.MES.WEBAPI.Method
{
	public class AddRD10
	{
		public static string Insert(string filename, string jsons)
		{
			//LogException.WriteiLog(filename, "接收到的json:" + jsons, LogException.ilog, false);
			Result mr = new Result();
			List<ItemsItemR> lim = new List<ItemsItemR>();
			
			int row = 0;
			string res = "";
			bool flag = !string.IsNullOrEmpty(jsons);
			if (flag)
			{
				try
				{
					List<string> list = new List<string>();
					RD10 rd = JsonConvert.DeserializeObject<RD10>(jsons);
					string cCode = rd.cCode;
					int cou = rd.Items.Count;
					string moid = "";
					bool flag2 = string.IsNullOrEmpty(cCode);
					if (flag2)
					{
						row = 1;
						res += "U8工单号不允许为空!检查cCode字段";
					}
                    else
                    {
                        for (int k = 0; k < cou; k++)
                        {
							string autoid = rd.Items[k].Autoid;
							DataTable dtm = SQLHelper.GetDataTable(string.Concat(new string[]
							{
								"select moid from ",
								AddRD10.DBname,
								"..mom_orderdetail where MoDId='",
								autoid,
								"'"
							}));
							int ifex = Convert.ToInt32(dtm.Rows.Count);
							bool flag3 = ifex > 0;
							if (flag3)
							{
								moid = dtm.Rows[0]["moid"].ToString();
								cCode = SQLHelper.GetString("select MoCode from "+DBname+"..mom_order where moid="+moid+"");
							}
							else
							{
								row = 1;
								res = res + "U8工单["+autoid+"]查不到工单!";
							}
						}
                        
                    }
                    string dCode = rd.dCode;
					bool flag4 = string.IsNullOrEmpty(dCode);
					if (flag4)
					{
						row = 1;
						res += "外部系统单号不允许为空!检查dCode字段";
					}
					else
					{
						int ifex2 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD10.DBname,
							"..rdrecord10 where cCode='",
							dCode,
							"'"
						})));
						bool flag5 = ifex2 > 0;
						if (flag5)
						{
							row = 1;
							res = string.Concat(new string[]
							{
								res,
								"外部系统单号[",
								dCode,
								"]在U8系统已存在",
								filename,
								"信息!"
							});
						}
					}
					string dDate = rd.dDate;
					bool flag6 = !string.IsNullOrEmpty(dDate);
					if (flag6)
					{
						bool flag7 = !PublicMet.IsDate(dDate);
						if (flag7)
						{
							row = 1;
							res += "日期格式不正确!例：[2024-11-12]";
						}
					}
					else
					{
						row = 1;
						res += "日期不允许为空！检查dDate字段";
					}
					string RedVouch = rd.RedVouch;
					bool flag8 = RedVouch != "1" && RedVouch != "0";
					if (flag8)
					{
						row = 1;
						res += "红蓝单据类型非法;检查RedVouch字段1：红字0：蓝字";
					}
					string cRdCode = rd.cRdCode;
					bool flag9 = string.IsNullOrEmpty(cRdCode);
					if (flag9)
					{
						row = 1;
						res += "类型不允许为空!检查cRdCode字段";
					}
					else
					{
						int ifex3 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD10.DBname,
							"..Rd_Style where cRdCode='",
							cRdCode,
							"'"
						})));
						bool flag10 = ifex3 == 0;
						if (flag10)
						{
							row = 1;
							res = res + "类型[" + cRdCode + "]在U8系统不存在!";
						}
					}
					string cWhCode = rd.cWhCode;
					bool flag11 = string.IsNullOrEmpty(cWhCode);
					if (flag11)
					{
						row = 1;
						res += "仓库编码不允许为空!检查cWhCode字段";
					}
					else
					{
						int ifex4 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD10.DBname,
							"..Warehouse where cWhCode='",
							cWhCode,
							"'"
						})));
						if (ifex4==0)
						{
							row = 1;
							res = res + "仓库编码[" + cWhCode + "]在U8系统不存在!";
						}
					}
					string cMaker = rd.cMaker;
					bool flag12 = string.IsNullOrEmpty(cMaker);
					if (flag12)
					{
						row = 1;
						res += "制单人不允许为空!检查cMaker字段";
					}
					else
					{
						string cMakers = PublicMet.CUSERNAME(cMaker);
						if (string.IsNullOrEmpty(cMakers))
						{
							row = 1;
							res += "未找到编码为[" + cMaker + "]的制单人员!";
						}
						else
						{
							cMaker = cMakers;
						}
					}
					string cHandler = rd.cHandler;
					bool flag13 = string.IsNullOrEmpty(cHandler);
					if (flag13)
					{
						row = 1;
						res += "审核人不允许为空!检查cHandler字段";
					}
					else
					{
						string cHandlers = PublicMet.CUSERNAME(cHandler);
						if (string.IsNullOrEmpty(cHandlers))
						{
							row = 1;
							res += "未找到编码为[" + cHandler + "]的审核人员!";
						}
						else
						{
							cHandler = cHandlers;
						}
					}
					string cDepCode = rd.cDepCode;
					bool flag15 = !string.IsNullOrEmpty(cDepCode);
					if (flag15)
					{
						int ifex5 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD10.DBname,
							"..Department where cDepCode='",
							cDepCode,
							"'"
						})));
						bool flag16 = ifex5 == 0;
						if (flag16)
						{
							row = 1;
							res = res + "部门编码[" + cDepCode + "]在U8系统不存在!";
						}
					}
					else
					{
						row = 1;
						res = res + "部门编码不允许为空，检查cDepCode字段!";
					}
					string cMemo = rd.cMemo;
					string cAcc_Id = AddRD10.DBname.Substring(7, 3);
					int fidrd = 0;
					int cidrd = 0;
					string sql = " select iFatherId,iChildId from UFSystem..UA_Identity where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ";
					DataTable dtidrd = SQLHelper.GetDataTable(sql);
					bool flag17 = dtidrd.Rows.Count > 0;
					if (flag17)
					{
						fidrd = Convert.ToInt32(dtidrd.Rows[0]["iFatherId"].ToString());
						cidrd = Convert.ToInt32(dtidrd.Rows[0]["iChildId"].ToString());
					}
					else
					{
						sql = " insert into UFSystem..UA_Identity (cAcc_Id,cVouchType,iFatherId,iChildId)  values('" + cAcc_Id + "','rd',0,0) ";
						SQLHelper.ExecuteSql(sql);
					}
					fidrd++;
					SQLHelper.ExecuteSql("update UFSystem..UA_Identity set iFatherId=iFatherId+1 where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ");
					string ID10 = "1" + string.Format("{0:D9}", fidrd);
					string Code10 = dCode;
					string csysbarcode = "||st10|" + Code10;
					string VT_ID = "63";
					sql = string.Concat(new string[]
					{
						"insert into ",
						AddRD10.DBname,
						"..RDRECORD10(id,brdflag,cvouchtype,cbustype,csource,\r\n                           cwhcode,ddate,ccode,crdcode,chandler,\r\n                           cmemo,btransflag,cmaker,dveridate,bpufirst,\r\n                           biafirst,vt_id,bisstqc,cmpocode,iproorderid,\r\n                           bfrompreyear,biscomplement,iDiscountTaxType,ireturncount,iverifystate,\r\n                           iswfcontrolled,dnmaketime,dnverifytime,bredvouch,iPrintCount,\r\n                           cDepCode,cdefine10,csysbarcode )\r\n                           values ('",
						ID10,
						"',1,'10','成品入库','生产订单',\r\n                            '",
						cWhCode,
						"','",
						dDate,
						"','",
						dCode,
						"','",
						cRdCode,
						"','",
						cHandler,
						"','",
						cMemo,
						"',0,'",
						cMaker,
						"','",
						dDate,
						"',0,\r\n                            0,'",
						VT_ID,
						"',0,'",
						cCode,
						"','",
						moid,
						"',\r\n                            0,0,0,0,0,\r\n                            0,getdate(),getdate(),0,0,",
						Method.PublicMet.setvalue(2,cDepCode),
						",NULL,'",
						csysbarcode,
						"')"
					});
					LogException.WriteiLog(filename, "RD10主表新增语句:" + sql, LogException.ilog, false);
					list.Add(sql);
					for (int i = 0; i < cou; i++)
					{
						ItemsItemR mir = new ItemsItemR();
						string Autoid = rd.Items[i].Autoid;
						bool flag18 = string.IsNullOrEmpty(Autoid);
						if (flag18)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行U8工单明细唯一标识ID不允许为空!检查Autoid字段";
						}
						else
						{
							int ifex6 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
							{
								"select COUNT(*) from ",
								AddRD10.DBname,
								"..mom_orderdetail where modid='",
								Autoid,
								"'"
							})));
							bool flag19 = ifex6 == 0;
							if (flag19)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行U8工单明细唯一ID[",
									Autoid,
									"]在U8系统不存在!"
								});
							}
						}
						string RowNo = rd.Items[i].RowNo;
						bool flag20 = string.IsNullOrEmpty(RowNo);
						if (flag20)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行行号不允许为空!检查RowNo字段";
						}
						string cInvCode = rd.Items[i].cInvCode;
						bool flag21 = string.IsNullOrEmpty(cInvCode);
						if (flag21)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行存货编码不允许为空!检查cInvCode字段";
						}
						else
						{
							int ifex7 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
							{
								"select COUNT(*) from ",
								AddRD10.DBname,
								"..Inventory where cinvcode='",
								cInvCode,
								"'"
							})));
							bool flag22 = ifex7 == 0;
							if (flag22)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行存货编码[",
									cInvCode,
									"]在U8系统不存在!"
								});
							}
						}
						string iQuantity = rd.Items[i].iQuantity;
						bool flag23 = string.IsNullOrEmpty(iQuantity);
						if (flag23)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行数量不允许为空!检查iQuantity字段!";
						}
						else
						{
							bool flag24 = !PublicMet.IsNumberic(iQuantity);
							if (flag24)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行数量[",
									iQuantity,
									"]非数字类型!"
								});
							}
						}
						string cBatch = rd.Items[i].cBatch;
						bool cba = Convert.ToBoolean(SQLHelper.GetString(string.Concat(new string[]
						{
							"select isnull(bInvBatch,0) from ",
							AddRD10.DBname,
							"..Inventory where cinvcode='",
							cInvCode,
							"'"
						})));
						if (cba)
						{
							bool flag26 = string.IsNullOrEmpty(cBatch);
							if (flag26)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行存货[",
									cInvCode,
									"]进行批次管理,批次不允许为空,检查cBatch字段!"
								});
							}
						}
						string dMadeDate = rd.Items[i].dMadeDate;
						string cPosCode = rd.Items[i].cPosCode;
						bool flag27 = row == 0;
						if (flag27)
						{
							cidrd++;
							SQLHelper.ExecuteSql("update UFSystem..UA_Identity set iChildId=iChildId+1 where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ");
							string autoid10 = "1" + string.Format("{0:D9}", cidrd);
							string imoseq = string.Empty;
							DataTable mdt = AddRD10.GetMoDetail(Autoid, AddRD10.DBname);
							bool flag28 = mdt.Rows.Count > 0;
							if (flag28)
							{
								imoseq = mdt.Rows[0]["imoseq"].ToString();
							}
							string cbsysbarcode = "||st10|" + Code10 + "|" + (i + 1).ToString();
							string sqlunit = string.Concat(new string[]
							{
								"select  cSTComUnitCode,isnull(iChangRate,NULL) iChangRate   from ",
								AddRD10.DBname,
								"..inventory i  left join ",
								AddRD10.DBname,
								"..ComputationUnit c  on i.cSTComUnitCode=c.cComunitCode  where cinvcode='",
								cInvCode,
								"'"
							});
							LogException.WriteiLog(filename, "产成品入库辅计量单位编码查询语句：" + sqlunit, LogException.ilog, false);
							DataTable dtiv = SQLHelper.GetDataTable(sqlunit);
							bool flag29 = dtiv.Rows.Count > 0;
							string cAssUnit;
							string iinvexchrate;
							if (flag29)
							{
								cAssUnit = "'" + dtiv.Rows[0]["cSTComUnitCode"].ToString() + "'";
								bool flag30 = !string.IsNullOrEmpty(dtiv.Rows[0]["iChangRate"].ToString());
								if (flag30)
								{
									iinvexchrate = (dtiv.Rows[0]["iChangRate"].ToString() ?? "");
								}
								else
								{
									iinvexchrate = "NULL";
								}
							}
							else
							{
								cAssUnit = "NULL";
								iinvexchrate = "NULL";
							}
							sql = string.Concat(new string[]
							{
								"insert into ",
								AddRD10.DBname,
								"..rdrecords10(autoid,id,cinvcode,iquantity,cbatch,\r\n                                    iflag,inquantity,impoids,brelated,blpusefree,\r\n                                    irsrowno,ioritrackid,bcosting,cmocode,imoseq,\r\n                                    iexpiratdatecalcu,iorderdid,iordertype,isotype,irowno,\r\n                                    dMadeDate ,dVDate ,cExpirationdate,iposflag ,cPosition ,\r\n                                    cbMemo,cbsysbarcode ,cBatchProperty6,iinvexchrate ,cAssUnit)\r\n                                    values ('",
								autoid10,
								"','",
								ID10,
								"','",
								cInvCode,
								"','",
								iQuantity,
								"','",
								cBatch,
								"',\r\n                                    0,'",
								iQuantity,
								"','",
								Autoid,
								"',0,0,\r\n                                    0,0,1,'",
								cCode,
								"','",
								imoseq,
								"',\r\n                                    0,0,0,0,'",
								(i + 1).ToString(),
								"',\r\n                                    null,null,null,1,NULL,\r\n                                    NULL,'",
								cbsysbarcode,
								"',NULL,",
								iinvexchrate,
								",",
								cAssUnit,
								" )"
							});
							list.Add(sql);
							list.Add(string.Concat(new string[]
							{
								"update ",
								AddRD10.DBname,
								"..mom_orderdetail set QualifiedInQty=isnull(QualifiedInQty,0)+",
								iQuantity,
								" where MoDId='",
								Autoid,
								"'"
							}));
							list.Add(string.Concat(new string[]
							{
								"insert into ",
								AddRD10.DBname,
								"..IA_ST_UnAccountVouch10(IDUN,IDSUN,cVouTypeUN,cBustypeUN) values ('",
								ID10,
								"','",
								autoid10,
								"','10','成品入库')"
							}));
							mir.Autoid = Autoid;
							mir.U8RowNo = (i + 1).ToString();
							mir.U8ID = autoid10;
							lim.Add(mir);
						}
					}
					sql = string.Concat(new string[]
					{
						"exec ",
						AddRD10.DBname,
						"..pro_uptcurrentStock '",
						AddRD10.DBname,
						"','10','",
						ID10,
						"'"
					});
					list.Add(sql);
					bool flag31 = row == 0;
					if (flag31)
					{
						int count = SQLHelper.ExecuteSqlTran(list);
						bool flag32 = count > 0;
						if (flag32)
						{
							res += "入库成功";
							mr.U8Code = dCode;
							mr.Items = lim;
							LogException.WriteiLog(filename, "RD10入库成功[" + dCode + "]", LogException.ilog, false);
						}
						else
						{
							row = 1;
							res += "入库失败";
						}
					}
				}
				catch (Exception ex)
				{
					row = 1;
					LogException.WriteiLog(filename, "RD10异常:" + ex.Message, LogException.ilog, true);
					res = res + "失败:" + ex.Message;
				}
			}
			else
			{
				row = 1;
				res += "未传任何数据!";
			}
			bool flag33 = row == 1;
			if (flag33)
			{
				mr.Code = "500";
				mr.Msg = res;
			}
			else
			{
				mr.Code = "200";
				mr.Msg = res;
			}
			return JsonConvert.SerializeObject(mr);
		}
		public static DataTable GetMoDetail(string modid, string zt)
		{
			return SQLHelper.GetDataTable(string.Concat(new string[]
			{
				"select InvCode,moid,SortSeq imoseq from ",
				zt,
				"..mom_orderdetail where modid='",
				modid,
				"'"
			}));
		}
		public static string DBname = ConfigurationManager.AppSettings["U8DBNAME"].ToString();
	}
}
